import fs from 'fs'
import Yaml from 'yaml'

const defaultConfigPath = 'plugins/hl-wife-plugin/config/defaultconfig/config.yaml'
const configPath = 'plugins/hl-wife-plugin/config/config.yaml'

function readDefaultConfig () {
  try {
    return Yaml.parse(fs.readFileSync(defaultConfigPath, 'utf8'))
  } catch (err) {
    logger.error('默认配置文件读取失败:', err)
    return {}
  }
}

function readConfig () {
  try {
    if (fs.existsSync(configPath)) {
      return Yaml.parse(fs.readFileSync(configPath, 'utf8'))
    } else {
      const defaultConfig = readDefaultConfig()
      writeConfig(defaultConfig)
      return defaultConfig
    }
  } catch (err) {
    logger.error('配置文件读取失败，将使用默认配置')
    return readDefaultConfig()
  }
}

function writeConfig (config) {
  try {
    fs.writeFileSync(configPath, Yaml.stringify(config))
    logger.info('配置文件已更新')
  } catch (e) {
    logger.error('配置文件更新失败:', e)
  }
}

function updateMissingConfig (target, source) {
  let hasNewConfig = false
  Object.keys(source).forEach(key => {
    if (source[key] !== null && typeof source[key] === 'object' && !Array.isArray(source[key])) {
      if (!target[key] || typeof target[key] !== 'object') {
        target[key] = {}
        hasNewConfig = true
        logger.info(`添加新配置组: ${key}`)
      }
      updateMissingConfig(target[key], source[key])
    } else if (!(key in target)) {
      target[key] = source[key]
      hasNewConfig = true
      logger.info(`添加新配置项: ${key}`)
    }
  })
  return hasNewConfig
}

export function updateConfig () {
  const config = readConfig()
  const defaultConfig = readDefaultConfig()
  const hasNewConfig = updateMissingConfig(config, defaultConfig)
  if (hasNewConfig) {
    writeConfig(config)
  }
}
